From 94187eb55b3334899a3b124041254e48f920ac6e Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 20 Sep 2010 18:50:06 +0100 Subject: [PATCH] rangesets: add function to query for overlaps Signed-off-by: Jan Beulich --- xen/common/rangeset.c | 16 ++++++++++++++++ xen/include/xen/rangeset.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/xen/common/rangeset.c b/xen/common/rangeset.c index 78d0647acc..bb9523fda6 100644 --- a/xen/common/rangeset.c +++ b/xen/common/rangeset.c @@ -251,6 +251,22 @@ int rangeset_contains_range( return contains; } +int rangeset_overlaps_range( + struct rangeset *r, unsigned long s, unsigned long e) +{ + struct range *x; + int overlaps; + + ASSERT(s <= e); + + spin_lock(&r->lock); + x = find_range(r, e); + overlaps = (x && (s <= x->e)); + spin_unlock(&r->lock); + + return overlaps; +} + int rangeset_report_ranges( struct rangeset *r, unsigned long s, unsigned long e, int (*cb)(unsigned long s, unsigned long e, void *), void *ctxt) diff --git a/xen/include/xen/rangeset.h b/xen/include/xen/rangeset.h index 4219c079ef..1e16a6b319 100644 --- a/xen/include/xen/rangeset.h +++ b/xen/include/xen/rangeset.h @@ -53,6 +53,8 @@ int __must_check rangeset_remove_range( struct rangeset *r, unsigned long s, unsigned long e); int __must_check rangeset_contains_range( struct rangeset *r, unsigned long s, unsigned long e); +int __must_check rangeset_overlaps_range( + struct rangeset *r, unsigned long s, unsigned long e); int rangeset_report_ranges( struct rangeset *r, unsigned long s, unsigned long e, int (*cb)(unsigned long s, unsigned long e, void *), void *ctxt); -- 2.30.2